package wt.hpad.base;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.daimajia.swipe.implments.SwipeItemMangerImpl;

/**
 * RecycleView Holder 基类
 * Created by wt on 17-8-17.
 */

public abstract class BaseHolder<T> extends RecyclerView.ViewHolder {
    protected BaseRvAdapter<T> nAdapter;
    protected BaseRvSwAdapter<T> sAdapter;

    /**
     * 如果有 HeadView , 则仅仅使用它
     */
    public BaseHolder(View itemView) {
        super(itemView);
    }

    /**
     * Holder构造函数中, 进行从 Layout -> View 的转换. 转后的 View 就存在于 super.itemViem
     * 通过 setItemView 函数 取回并与 子类的子控件变量进行对应.
     */
    public BaseHolder(Context context, ViewGroup parent, BaseRvAdapter<T> adapter, int layoutID) {
        // 把布局转成view的 -> super.itemView, 这里巧妙应用了父类的有参构造函数
        super(LayoutInflater.from(context).inflate(layoutID, parent, false));
        this.nAdapter = adapter;
        // 把转好的 itemView 从 super 拿回来
        View itemView = super.itemView;
        // 从 View 中把子控件抽取出来, 此工作由子类完成
        setItemView(itemView);
    }

    /**
     * Holder构造函数中, 进行从 Layout -> View 的转换. 转后的 View 就存在于 super.itemViem
     * 通过 setItemView 函数 取回并与 子类的子控件变量进行对应.
     */
    public BaseHolder(Context context, ViewGroup parent, BaseRvSwAdapter<T> adapter, int layoutID) {
        // 把布局转成view的 -> super.itemView, 这里巧妙应用了父类的有参构造函数
        super(LayoutInflater.from(context).inflate(layoutID, parent, false));
        sAdapter = adapter;
        // 把转好的 itemView 从 super 拿回来
        View itemView = super.itemView;
        // 从 View 中把子控件抽取出来, 此工作由子类完成
        setItemView(itemView);
    }

    /**
     * 这里是关键, 在子类中定义各个子控件的变量,
     * 通过本函数抽取映射到这些子控件变量
     */
    public abstract void setItemView(View itemView);

    public abstract void bindItemValue(T bean);

    /**
     * 包装一下 bindItemValue ,
     * 同时获取bing itemView bean 对象
     * 其他功能有待丰富...
     */
    public void showItemInList(T bean) {
        bindItemValue(bean);
    }

    public abstract void bindSwItemValue(SwipeItemMangerImpl mItemManger, T bean, int position);
}
